import axios from "axios"

/** 创建请求实例 */
function createService() {
    // 创建一个 Axios 实例
    const service = axios.create()
    // 请求拦截
    service.interceptors.request.use(
        (config) => {
            console.log("自定义配置:", config)
            config.headers['Authorization'] = "Bearer 9dbb0bcba9836a463ca8178aeb94e8c52c9a"
            if (!config['isUpload']) {
                config.headers['Content-Type'] = "application/json;charset=utf-8"
            }
            return config
        },
        // 发送失败
        (error) => Promise.reject(error)
    )
    // 响应拦截（可根据具体业务作出相应的调整）
    service.interceptors.response.use(
        (response) => {
            // apiData 是 API 返回的数据
            const apiData = response.data as any
            // 这个 Code 是和后端约定的业务 Code
            const code = apiData.code
            // 如果没有 Code, 代表这不是项目后端开发的 API
            if (code === undefined) {
                return Promise.reject(new Error("非本系统的接口"))
            } else {
                switch (code) {
                    case 0:
                        // code === 0 代表没有错误
                        return apiData
                    default:
                        // 不是正确的 Code
                        return Promise.reject(new Error("Error"))
                }
            }
        },
        (error) => {
            return Promise.reject(error)
        }
    )
    return service
}

/** 创建请求方法 */
function createRequestFunction(service) {
    return function <T>(config): Promise<T> {
        const configDefault = {
            headers: {
                // 携带 Token
                Authorization: "Bearer 57165014aa22ca4b45ab2b1a96ba1a0a4235",
                "Content-Type": "application/json"
            },
            timeout: 5000,
            baseURL: import.meta.env.VITE_BASE_API,
            data: {}
        }
        return service(Object.assign(configDefault, config))
    }
}

/** 用于网络请求的实例 */
export const service = createService()
/** 用于网络请求的方法 */
export const request = createRequestFunction(service)
